package dao;

import java.util.List;

import javax.persistence.PersistenceException;

/**
 * @author Mauricio Sennos
 * Interface que define o contrato CRUD na camada Data Access Object
 */

public interface IcrudDAO {
	
	/**
	 * @param namedQuery Uma consulta nomeada do JPA
	 * @param pag a p gina que se deseja exibir. A primeira p gina   0.
	 * @return Retorna uma lista gen rica de elementos definidos em tempo de execu  o
	 * @throws PersistenceException Um eventual erro lan ado pelo framework JPA
	 */
	List <?> lista(String namedQuery, int pag) throws PersistenceException;
	
	/**
	 * @param obj O objeto que se deseja incluir
	 * @throws PersistenceException Um eventual erro lan ado pelo framework JPA
	 */
	void insere(Object obj) throws PersistenceException;
	
	/**
	 * @param obj O objeto que se deseja alterar
	 * @return Inst ncia do objeto atualizado
	 * @throws PersistenceException Um eventual erro lan ado pelo framework JPA
	 */
	Object grava (Object obj) throws PersistenceException;
	
	/**
	 * @param obj O objeto que se deseja excluir
	 * @throws PersistenceException Um eventual erro lan ado pelo framework JPA
	 */
	void exclui(Object obj) throws PersistenceException;
	
	/**
	 * 
	 *            tipo class. Por exemplo, TipoDoc.class
	 * @param objId
	 *            O identificador da classe. <br>
	 *            Tipicamente   mapeado para uma chave no banco de dados
	 * @throws PersistenceException Um eventual erro lan ado pelo framework JPA
	 * @return O objeto recuperado
	 */
	Object getObjectById(Class <?> klass, Object objId) throws PersistenceException ;
}
